package cn.wolfcode.wolf2w.service;

import cn.wolfcode.wolf2w.domain.Strategy;
import cn.wolfcode.wolf2w.query.StrategyQuery;
import cn.wolfcode.wolf2w.redis.vo.StrategyStatisVO;
import cn.wolfcode.wolf2w.vo.CatalogVo;
import org.springframework.data.domain.Page;

import java.text.ParseException;
import java.util.List;

/**
 * 攻略明细业务层接口
 */
public interface IStrategyService {

    /**
     * 插入单个攻略明细对象
     * @param strategy
     */
    void insert(Strategy strategy);

    /**
     * 根据id删除某个攻略明细对象
     * @param id
     */
    void deleteById(String id);

    /**
     * 根据id修改某个攻略明细对象
     * @param strategy
     */
    void updateById(Strategy strategy);

    /**
     * 根据id查询某个攻略明细对象
     * @param id    查询条件
     * @return  攻略明细对象
     */
    Strategy selectById(String id);

    /**
     * 查询所有攻略明细对象
     * @return  strategy的list集合
     */
    List<Strategy> selectAll();

    /**
     * 分页和高级查询
     * @param qo    查询条件
     * @return  page对象
     */
    Page<Strategy> query(StrategyQuery qo);

    /**
     * 设置热门攻略明细
     * @param state
     * @param id
     * @return  strategy对象
     */
    //Strategy setChangeState(int state, String id);
    void setChangeState(int state, String id);

    /**
     * 添加或更新
     * @param strategy
     */
    void saveOrUpdate(Strategy strategy) throws ParseException;

    /**
     * 攻略点击量前3
     * @param destId
     * @return
     */
    List<Strategy> queryViewmunTop3(String destId);

    /**
     * 攻略id集合
     * @param sid
     * @return
     */
    List<String> queryStrategiesFavor(String sid, String userId);

    /**
     * 修改数据库中攻略表的数据
     * @param strategyStatisVO
     */
    void updateStrategyVo(StrategyStatisVO strategyStatisVO);

    /**
     * 根据目的地名字查询攻略
     * @param keyword
     * @return
     */
    List<Strategy> queryDestName(String keyword);
}
